package com.ruoyi.questionnaire.service.impl;

import java.util.Date;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.ruoyi.questionnaire.domain.Questionnaire;
import com.ruoyi.questionnaire.domain.QuestionnaireDesignDTO;
import com.ruoyi.questionnaire.domain.QuestionnaireOption;
import com.ruoyi.questionnaire.domain.QuestionnaireQuestion;
import com.ruoyi.questionnaire.mapper.QuestionnaireMapper;
import com.ruoyi.questionnaire.mapper.QuestionnaireOptionMapper;
import com.ruoyi.questionnaire.mapper.QuestionnaireQuestionMapper;
import com.ruoyi.questionnaire.service.IQuestionnaireDesignerService;

@Service
public class QuestionnaireDesignerServiceImpl implements IQuestionnaireDesignerService
{
    @Autowired
    private QuestionnaireMapper questionnaireMapper;
    @Autowired
    private QuestionnaireQuestionMapper questionMapper;
    @Autowired
    private QuestionnaireOptionMapper optionMapper;

    @Override
    @Transactional(rollbackFor = Exception.class)
    public void saveDesign(QuestionnaireDesignDTO designDTO, String currentUser) {
        Questionnaire questionnaire = designDTO.getQuestionnaire();
        List<QuestionnaireQuestion> questions = designDTO.getQuestions();
        Date now = new Date();
        // 1. 保存问卷（insert or update）
        if (questionnaire.getId() == null) {
            // 新增问卷
            questionnaire.setCreateTime(now);
            questionnaire.setUpdateTime(now);
            questionnaire.setCreateBy(currentUser);
            questionnaire.setUpdateBy(currentUser);
            questionnaireMapper.insertQuestionnaire(questionnaire);
        } else {
            // 更新问卷
            questionnaire.setUpdateTime(now);
            questionnaire.setUpdateBy(currentUser);
            questionnaireMapper.updateQuestionnaire(questionnaire);
            // 先删除原有题目和选项
            List<QuestionnaireQuestion> oldQuestions = questionMapper.selectQuestionnaireQuestionList(questionnaire.getId());
            for (QuestionnaireQuestion q : oldQuestions) {
                optionMapper.deleteQuestionnaireOptionByQuestionId(q.getId());
            }
            questionMapper.deleteQuestionnaireQuestionByQuestionnaireId(questionnaire.getId());
        }
        
        // 2. 批量插入题目和选项
        if (questions != null) {
            for (int i = 0; i < questions.size(); i++) {
                QuestionnaireQuestion question = questions.get(i);
                question.setQuestionnaireId(questionnaire.getId());
                // 确保orderNum从1开始，连续递增
                question.setOrderNum(i + 1);
                question.setCreateTime(now);
                question.setUpdateTime(now);
                question.setCreateBy(currentUser);
                question.setUpdateBy(currentUser);
                questionMapper.insertQuestionnaireQuestion(question);
                
                if (question.getOptionList() != null) {
                    for (int j = 0; j < question.getOptionList().size(); j++) {
                        QuestionnaireOption option = question.getOptionList().get(j);
                        option.setQuestionId(question.getId());
                        // 确保选项的orderNum也从1开始
                        option.setOrderNum(j + 1);
                        optionMapper.insertQuestionnaireOption(option);
                    }
                }
            }
        }
    }
} 